package instalador;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author acactown
 */



public class ConexionMySQL {

    private boolean aux;
    private static String servidorNombre;
    private static String puerto;
    private static String usuario;
    private static String contraseña;
    private static String url;
    public static Connection conexion = null;

    public ConexionMySQL() {
        servidorNombre = VariablesDeEntorno.HOST;
        puerto = VariablesDeEntorno.PUERTOSERVIDOR;
        usuario = VariablesDeEntorno.USUARIO;
        contraseña = VariablesDeEntorno.PASSWORD;
        url = "jdbc:mysql://" + servidorNombre + ":" + puerto + "/";

    }

    private boolean isOpen() {
        if (conexion != null) {
            return true;
        }
        return false;
    }

    public void ifOpenClose() {
        if (isOpen()) {
            aux = close();
        }
    }

    private boolean open() {
        try {
            if (!isOpen()) {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                conexion = DriverManager.getConnection(url, usuario, contraseña);
                if (isOpen()) {
                    System.out.println("Conexion Abierta.");
                    return true;
                }
            }
            System.out.println("ERROR(1) Abriendo Conexion: La Conexion ya estaba Abierta.");
            return false;
        } catch (SQLException excep) {
            System.out.println("ERROR(2) Abriendo Conexion: No se pudo llevar a cabo la Conexion.");
            System.out.println(excep.getMessage());
            return false;
        } catch (ClassNotFoundException excep) {
            System.out.println("ERROR(3) Abriendo Conexion: No se pudo llevar a cabo la Conexion.");
            System.out.println(excep.getMessage());
            return false;
        } catch (Exception excep) {
            System.out.println("ERROR(4) Abriendo Conexion: No se pudo llevar a cabo la Conexion.");
            System.out.println(excep.getMessage());
            return false;
        }
    }

    private boolean close() {
        try {
            if (isOpen()) {
                conexion.close();
                conexion = null;
                System.gc();
                System.out.println("Conexion Cerrada.");
                return true;
            }
            System.out.println("ERROR(1) Cerrando Conexion: La Conexion ya esta Cerrada.");
            return false;
        } catch (SQLException excep) {
            System.out.println("ERROR(2) Cerrando Conexion: No se pudo Cerrar la Conexion.");
            System.out.println(excep.getMessage());
            return false;
        }
    }

    public boolean testConnection() {
        if (open()) {
            if (close()) {
                System.out.println("    Prueba Satisfacoria.");
                return true;
            }
            System.out.println("    Prueba no Satisfacoria.");
            return false;
        }
        System.out.println("Prueba no Satisfacoria.");
        return false;
    }

    public boolean update(String instruccion) {
        try {
            if (open()) {
                Statement consulta = conexion.createStatement();
                int filasAfectadas = consulta.executeUpdate(instruccion);
                System.out.println("    Registros Actualizados. " + filasAfectadas);
                aux = close();
                return true;
            }
            System.out.println("ERROR(1) Realizando Actualizacion:  No se pudo llevar a cabo la Actualizacion del Registro.");
            return false;
        } catch (SQLException excep) {
            System.out.println("ERROR(2) Realizando Actualizacion:  No se pudo llevar a cabo la Actualizacion del Registro.");
            System.out.println(excep.getMessage());
            ifOpenClose();
            return false;
        }
    }
}
